/*
 * Copyright (C) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.tonyodev.fetchapp;

import ohos.aafwk.ability.fraction.Fraction;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.ComponentContainer;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.ProgressBar;
import ohos.agp.components.Text;

import com.tonyodev.fetch2.Download;
import com.tonyodev.fetch2core.FetchObserver;
import com.tonyodev.fetch2core.Reason;

/**
 * xinglu
 *
 * @since 2021-05-27
 */
public class ProgressFraction extends Fraction implements FetchObserver<Download> {

    private Component component;
    private ProgressBar progressBar;
    private Text progressTextView;

    @Override
    protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) {
        component = scatter.parse(ResourceTable.Layout_fraction_progress, container, false);
        progressBar = (ProgressBar) component.findComponentById(ResourceTable.Id_progressBar);
        progressTextView = (Text) component.findComponentById(ResourceTable.Id_progressTextView);
        return component;
    }

    private void updateProgress(int progress) {
        if (progress == -1) {
            progress = 0;
        }
        progressBar.setProgressValue(progress);
        progressTextView.setText(component.getContext().getString(ResourceTable.String_percent_progress, progress));
    }

    @Override
    public void onChanged(Download data, Reason reason) {
        updateProgress(data.getProgress());
    }
}
